<template>
    <m-page>
        <m-header></m-header>
        <div class="bankcard_transfer">
            <div>
                <!-- 收款户名 -->
                <!-- <ynet-input title="收款户名" placeholder="请输入收款户名" @on-focus="payeeNameFocus"
                    :rightIcon="require('@assets/transfer/payee.png')"
                    @rightIcon="selectPayee" v-model="payeeName" :max="40"></ynet-input> -->
                <!-- 收款账号 -->
                <!-- <ynet-input title="收款账号" placeholder="请输入收款账号" type="number" :max="39"
                    format="bankCard" @on-blur="inputCardNo"
                    v-model="payeeAccountNoSpace"></ynet-input> -->
                <!-- 开户银行 -->
                <!-- <ynet-cell title="开户银行" @clickCell="selectPayeeBank">
                    {{ payeeBankName | formatBankName }}
                </ynet-cell> -->
            </div>
            <div class="mt20">
                <!-- 转出账户 -->
                <!-- <ynet-cell title="转出账户" @clickCell="selectPayCard" :rightArrow="false">{{ transferredAccount |
                    formatAccountNo }}</ynet-cell> -->
                <!-- 可用余额 -->
                <!-- <ynet-cell title="可用余额" :rightArrow="false">{{ balance | formatMoney }}元
                </ynet-cell> -->
                <!-- 转账金额 -->
                <!-- <ynet-money-input title="转账金额" @on-blur="vefifyMoney"
                    placeholder="请输入转账金额" v-model="transferAmount">
                </ynet-money-input> -->
            </div>
            <div class="mt20">
                <!-- 转账方式 -->
                <!-- <ynet-select title="转账方式" :menus="transferTypeList"
                    :index="transferTypeIndex" @on-click-menu="selectTransferType">
                </ynet-select> -->
                <!-- 短信通知 -->
                <!-- <ynet-input title="短信通知" placeholder="对方手机号（可不填）" type="number"
                    :rightIcon="require('@assets/transfer/txl.png')"
                    @rightIcon="selectPhone" v-model="telPhone" format="phoneNum"
                    :max="13">
                </ynet-input> -->
                <!-- 附言 -->
                <!-- <ynet-input title="附言" :max="100" v-model="transferNote"
                    :rightIcon="require('@assets/transfer/payee.png')"
                    @rightIcon="selectTransferNote"></ynet-input> -->
            </div>
            <div class="mt20">
                <!-- 下一步按钮 -->
                <!-- <ynet-button @click.native="transferNext">下一步</ynet-button> -->
            </div>
            <!-- 温馨提示 -->
            <!-- <ynet-prompt v-if="pactText !=''">
                <p v-html="pactText"></p>
            </ynet-prompt> -->
        </div>
    </m-page>
</template>

<script>
    //import ynetMoneyInput from '@ce/ynet_money_input';
    import {
        queryCardInfos,
        queryTransferLimit,
        selectRouter,
        transferNewJudge,
        getTelephoneNumber,
        isNeedSmsCode,
        sendSMSCode,
        prepare,
        verifySMSCode,
        applySign,
        safeguard,
        transfer
    } from '../../request/index';
    export default {
        // components: {
        //     ynetMoneyInput
        // },
        data() {
            return {
                transType: '0', // 转账方式
                hasPayeeInfo: false, // 是否从最近转账记录跳转
                transferredAccount: '', //付款账号
                balance: '', // 可用余额
                currency: '', // 币种
                accountType: '', // 账户类型
                payeeName: '', // 收款人姓名
                telPhone: '', // 收款人手机号
                tempPayeeName: '', //上次查询的收款人姓名
                tempTelPhone: '', // 上次查询的收款人手机号
                payeeAccountNoSpace: '', //收款人账号，有空格
                payeeAccountNo: '', // 收款人账号
                payeeBankName: '选择银行', // 收款银行
                payeeBankNo: '', // 收款银行号
                bankBkType: '', // 行别代码
                payeeBardType: '', // 收款卡类型
                transferAmount: '', // 转账金额
                tempTransferAmount: '',
                daySumUse: '', // 转账已占用日累计限额
                transferTypeList1: [
                    // 转账方式列表
                    {
                        value: '1',
                        itemName: '实时转账'
                    },
                    {
                        value: '2',
                        itemName: '普通转账'
                    },
                    {
                        value: '3',
                        itemName: '次日转账'
                    }
                ],
                transferTypeList2: [
                    {
                        value: '1',
                        itemName: '实时转账'
                    },
                    {
                        value: '3',
                        itemName: '次日转账'
                    }
                ],
                transferTypeList3: [
                    {
                        value: '2',
                        itemName: '普通转账'
                    },
                    {
                        value: '3',
                        itemName: '次日转账'
                    }
                ],
                transferType: '1', // 转账方式
                needSelectBranch: false, // 是否需要选择转账网点，根据金额
                needSelectBranchNoOpenBank: false, // 是否需要选择转账网点，根据开户行
                bankbranchName: '请选择银行网点', // 开户支行名称
                bankbranchNo: '', // 开户支行代码
                transferNote: '转账（点击修改）', // 转账附言
                promptText: '转账资金将实时转入收款行',
                pactText: '1、普通转账预计2小时内转至收款行，实际到账事件由人民银行和收款行处理决定；',
                authType: '', // 安全认证方式
                mobileNo: '', //手机号
                certNo: '', //证件号码
                certType: '', // 证件类型
                userName: '', //用户姓名
                transferTypeIndex: 0, //转账方式默认选择方式
                isSelectTransferTypePT: false, //是否手动选择了普通转账
                isSelectTransferTypeCR: false, //是否手动选择了次日转账
                isTransRepeat: '', //重复转账标识
                isCunzhen: false, //是否是村镇银行
                needSmsCode: true //是否需要校验短信验证码
            };
        },
        created() {
            console.log('00000000000');
            this.init();
        },
        resume() {
            // 获取选择收款人信息
            app.api.getSessionStorage('bankcard_transfer_payee', false).then(res => {
                console.log(res);
                //判断收款账号是否为空，不为空查询收款账号开户行信息
                this.inputCardNo();
            });
            // 获取选择的转出账号
            app.api.getSessionStorage('bankcard_transfer_payCard', false).then(res => {
                console.log(res);
                //根据获取到的转出账号查询卡账户信息接口、转账额度限制查询接口
                this.queryCardInfos();
                this.queryTransferLimit();
            });
            // 获取选择的转账附言
            app.api.getSessionStorage('bankcard_transfer_postscript', false).then(res => {
                console.log(res);
                //获取选中的转账附言并页面反显
            });
        },
        methods: {
            /**
             * Frame
             * 页面初始化方法
             * TODO
             */
            init() {
                const _self = this;
                //获取用户加挂的储蓄卡列表
                app.api
                    .getUserInfo()
                    .then(({ userInfo = {} }) => {
                        console.log(userInfo);
                        //判断是从哪个入口跳转过来
                        this.isEntry(entryType);
                        //温馨提示查询
                        this.selectPactText();
                    })
                    .catch(err => {
                        console.log(err);
                        alert('获取用户信息错误');
                    });
            },
            /**
             * Frame
             * 判断是从哪个模块跳转过来
             * entryType {String} 别的页面传过来的标识
             * TODO
             */
            isEntry(entryType) {
                //判断是从哪个模块入口进入的 entryType： 1、转账首页 2、转账结果页面 3、其他场景
                if (entryType == '1') {
                    //转账首页进入
                    //获取判断是否有I类长行默认卡
                    //有：转出账户默认显示I类长行默认卡
                    //没有：获取用户卡列表第一张BCS卡作为转出账户默认显示
                } else if (entryType == '2') {
                    //转账结果页进入
                    //获取上一次的转账信息，判断付款卡号是否为空
                    //把上一次的付款账号作为付款账号默认显示及相关转账信息反显
                } else {
                    //其他情况
                    //获取其他页面传过来的信息，将其他页面传过来的账号作为付款账号默认显示及相关转账信息反显
                }
            },
            /**
             * Frame
             * 查询温馨提示接口
             * TODO
             */
            selectPactText() {
                //调用温馨提示查询接口
            },
            /**
             * Frame
             * 获取银行图标
             * TODO
             */
            getImg(bankNo) {
                //调用公共函数匹配对应的银行log图标，目前该函数尚未实现
                //return tools.getBankLogo(bankNo);
            },
            /**
             * Frame
             * 点击收款户名输入框，判断用户是否签约云盾
             * TODO
             */
            payeeNameFocus() {
                //判断用户是否是签约云盾用户,没有签约云盾服务不允许输入并且弹框提示用户去签约云盾服务
            },
            /**
             * Frame
             * 跳转至收款人信息页面，选择收款人信息
             * TODO
             */
            selectPayee() {
                app.api.pushWindow('transfer/bankcard_transfer/payee.html');
            },
            /**
             * Frame
             * 查询收款账号开户行信息
             * TODO
             */
            inputCardNo() {
                //判断收款账号是否为空
                if (this.payeeAccountNo === '') {
                    return;
                }
                //接口上送参数
                let params = {
                    accountNumber: this.payeeAccountNo
                };
                getCardBin(params)
                    .then(res => {
                        console.log(res);
                        //获取收款账号开户行相关信息
                    })
                    .catch(err => {
                        console.log('======inputCardNo=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 选择开户行 调用原生的JSAPI获取
             * TODO
             */
            selectPayeeBank() {
                //开户行JSAPI待安卓、ios原生实现
                //app.api.
            },

            /**
             * Frame
             * 选择转出账户 转出账户页面为公共模块
             * TODO
             */
            selectPayCard() {
                //调用公共模块选中转出账户
            },

            /**
             * Frame
             * 查询卡账户信息接口
             * TODO
             */
            queryCardInfos() {
                //接口上送参数
                let params = {};
                queryCardInfos(params)
                    .then(res => {
                        console.log(res);
                        //获取账户可用余额及账户凭证状态
                        //凭证状态正常、余额正常，下一步按钮才可点击
                    })
                    .catch(err => {
                        console.log('======queryCardInfos=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 转账额度限制查询接口
             * TODO
             */
            queryTransferLimit() {
                //接口上送参数
                let params = {};
                queryTransferLimit(params)
                    .then(res => {
                        console.log(res);
                        //获取签名使用额度、当日剩余额度、单笔额度、当日可用总额度字段值
                    })
                    .catch(err => {
                        console.log('======queryCardInfos=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 金额格式化处理，公共函数
             * TODO
             */
            vefifyMoney() {
                //调用公共函数处理
            },

            /**
             * Frame
             * 调用jsAPI获取手机的通讯录信息
             * TODO
             */
            selectPhone() {
                app.api.showAddressList().then(res => {
                    if (res.data.length > 0 && res.data[0].phoneNums.length > 0) {
                        this.telPhone = tools.formatMobileSpace(res.data[0].phoneNums[0]);
                    }
                });
            },

            /**
             * Frame
             * 选择常用的转账附言
             * TODO
             */
            selectTransferNote() {
                //跳转至转账附言页面
                app.api.pushWindow('transfer/bankcard_transfer/postscript.html');
            },

            /**
             * Frame
             * 选择转账方式
             * TODO
             */
            selectTransferType(item) {
                //转账方式选择处理
            },

            /**
             * Frame
             * 转账路由查询
             * TODO
             */
            selectTransferRouter() {
                //接口上送参数
                let params = {};
                selectRouter(params)
                    .then(res => {
                        console.log(res);
                        // routeId;// 汇路编号
                        // routeName;// 汇路名称
                        // routeDescription;// 汇路描述
                        // showAccount;// 是否显示开户行网点 0000-不要显示网点，1111-显示网点
                        // LimitAmt;// 单笔限额
                    })
                    .catch(err => {
                        console.log('======selectTransferRouter=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 保存转账相关信息
             * TODO
             */
            saveInfo(res = {}) {
                app.api.setSessionStorage('bankcard_transfer_information', res);
            },

            /**
             * Frame
             * 转账权限查询，判断是否是重复转账
             * TODO
             */
            transferNewJudge() {
                //接口上送参数
                let params = {};
                transferNewJudge(params)
                    .then(res => {
                        console.log(res);
                        // IsTransRepeat; 1：重复转账 其他：不是重复转账
                        // TransTime; 上次转账时间
                        this.isTransRepeat = res.IsTransRepeat;
                        let transTime = res.TransTime;
                        if (this.isTransRepeat === '1') {
                            //重复转账
                            let msg =
                                '您于' +
                                TransTime +
                                '已向该收款账号提交了金额相同的转账交易，请确认是否需要再次转账，或先查询上次转账结果,避免资金损失。';
                            app.api.confirm('', msg, { okButton: '继续', cancelButton: '转账记录' }).then(res => {
                                if (res.ok) {
                                    //根据接口返回的状态码判断 920003:超过单笔限额;920004:超过当日限额;920006:超过当月限额
                                    //判断云盾服务状态，云盾状态异常不允许转账
                                    this.isSameNameTransfer(); //判断是否是同名转账
                                } else {
                                    //跳转至转账记录页面
                                }
                            });
                        } else {
                            //不是重复转账
                            this.isSameNameTransfer(); //判断是否是同名转账
                        }
                    })
                    .catch(err => {
                        console.log('======selectTransferRouter=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 判断是否是本行卡并且是该用户加挂的卡（同名转账）
             */
            async isSameNameTransfer() {
                //判断是否是同名转账 同名转账不需要校验短信验证码 this.needSmsCode = false
                //根据开户行号判断是否是本行卡
                //转账方式 ： 0：正常转账 2：云盾转账
                //调用转账限制查询接口，获取到相关的限额
                let limitObj = await this.queryTransferLimit();
                this.isTransferLimit(limitObj);
            },

            /**
             * Frame
             * 判断转账限额
             * TODO
             */
            isTransferLimit(limitObj) {
                let amount = limitObj.UserAmt + this.transferAmount; //账号当日累计已转账金额(非柜面所有渠道)+转账金额
                //判断是否签约了云盾并且转账金额小于等于5000并且（日累计设置限额 -  日累计剩余额度）+ 转账金额小于等于5000  ---待确认
                if (this.transferAmount >= 5000 && limitObj.dailyTotalLimit - limitObj.SYS_DAILY_LIMIT >= 5000) {
                    //不需要校验短信验证码
                    //不需要校验短信标识赋值
                } else {
                    if (this.transferAmount > 300000) {
                        //大于5000，判断转账金额是否大于30万
                        let msg = '您本次转账金额超过30万元，请您再次确认大额交易转账金额。';
                        app.api.confirm('', msg, { okButton: '确认', cancelButton: '取消' }).then(res => {
                            if (res.ok) {
                                //调用判断是否是村镇银行方法
                                this.isTownbank();
                            }
                        });
                    } else if (amount >= 300000) {
                        //判断（账号当日累计已转账金额(非柜面所有渠道)+转账金额）大于等于30万
                        let msg =
                            '您本次转账金额' +
                            this.transferAmount +
                            '元，单日累计转账金额为' +
                            amount +
                            '元，请您再次确认大额交易转账金额。';
                        app.api.confirm('', msg, { okButton: '确认', cancelButton: '取消' }).then(res => {
                            if (res.ok) {
                                //调用判断是否是村镇银行方法
                                this.isTownbank();
                            }
                        });
                    } else {
                        //调用判断是否是村镇银行方法
                        this.isTownbank();
                    }
                }
            },

            /**
             * Frame
             * 根据是否是村镇银行标识判断
             * TODO
             */
            isTownbank() {
                if (this.isCunzhen) {
                    //村镇银行
                    //跳转至开户网点页面选择对应网点
                    //选择开户网点后，调用查询预留手机号接口
                    this.getTelephoneNumber();
                } else {
                    //非村镇银行
                    //调用查询预留手机号接口
                    this.getTelephoneNumber();
                }
            },

            /**
             * Frame
             * 根据收款卡号匹配查询常用联系人（是否需要验证码）接口
             * TODO
             */
            isNeedSmsCode() {
                //接口上送参数
                let params = {};
                isNeedSmsCode(params)
                    .then(res => {
                        console.log(res);
                        //needSmsCode  //0需要，1不需要
                        //根据接口返回的标识，给全局是否需要校验短信验证码赋值
                        this.needSmsCode = res.needSmsCode === '1' ? false : true;
                    })
                    .catch(err => {
                        console.log('======isNeedSmsCode=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 获取短信验证码
             * TODO
             */
            send() {
                //获取客户号
                app.api
                    .getUserInfo()
                    .then(({ userInfo = {} }) => {
                        console.log(userInfo);
                        //判断客户号是否为空，为空不能获取短信验证码
                        //客户号不为空调用短信验证码接口
                        //接口上送参数
                        let params = {};
                        sendSMSCode(params)
                            .then(res => {
                                console.log(res);
                                //弹框提示短信验证码已发送
                            })
                            .catch(err => {
                                console.log('======send=====');
                                console.log(err);
                            });
                    })
                    .catch(err => {
                        console.log(err);
                        alert('获取用户信息错误');
                    });
            },

            /**
             * Frame
             * 校验短信验证码
             * TODO
             */
            verifySMSCode() {
                //接口上送参数
                let params = {};
                verifySMSCode(params)
                    .then(res => {
                        console.log(res);
                        //调用银行卡转账提交
                        this.cardTransferSubmit();
                    })
                    .catch(err => {
                        console.log('======verifySMSCode=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 银行卡转账提交获取防重标识
             * TODO
             */
            cardTransferSubmit() {
                //接口上送参数
                let params = {};
                prepare(params)
                    .then(res => {
                        console.log(res);
                        //获取接口返回的token值，并缓存
                        //转账方式判断
                        this.isIransferWay();
                    })
                    .catch(err => {
                        console.log('======cardTransferSubmit=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 银行卡转账提交
             * TODO
             */
            isIransferWay() {
                //判断转账方式 0：云盾转账 1：正常转账方式
                if (云盾转账) {
                    //抽出做成公共函数
                    //接口上送参数
                    let params = {};
                    //云盾加签申请
                    applySign(params)
                        .then(res => {
                            console.log(res);
                            // RandomSignData;//随机数加签串
                            // BizSignData   ;//交易要素加签串
                            // SignSeqNo     ;//加签流水号
                            if (判断是否要下载证书) {
                                //接口上送参数
                                let params = {};
                                //下载证书
                                safeguard(params)
                                    .then(res => {
                                        console.log(res);
                                        //接口返回成功，根据状态码判断是否下载成功 OP12：下载成功 OP17：吊销状态
                                        //OP12:下载成功，需要重新调用云盾加签接口
                                        //OP17：吊销状态,需要重新调用下载证书接口
                                    })
                                    .catch(err => {
                                        console.log('======safeguard=====');
                                        console.log(err);
                                    });
                            } else {
                                //不需要下载证书
                                // 银行卡转账提交
                                this.transferCommit();
                            }
                        })
                        .catch(err => {
                            console.log('======applySign=====');
                            console.log(err);
                        });
                } else {
                    //正常转账
                    // 银行卡转账提交
                    this.transferCommit();
                }
            },

            /**
             * Frame
             * 银行卡转账提交
             * TODO
             */
            transferCommit() {
                //接口上送参数
                let params = {};
                //保存转账相关信息
                this.saveInfo(params);

                transfer(params)
                    .then(res => {
                        console.log(res);
                        //转账提交成功，跳转至转账结果页面，显示对应的转账结果信息
                        app.api.pushWindow('transfer/bankcard_transfer/transfer_success.html');
                    })
                    .catch(err => {
                        console.log('======transferCommit=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 预留手机号查询
             * TODO
             */
            async getTelephoneNumber() {
                if (判断是否需要校验短信验证码) {
                    //根据收款卡号匹配查询常用联系人（是否需要验证码）接口
                    await this.isNeedSmsCode();
                }

                //接口上送参数
                let params = {};
                getTelephoneNumber(params)
                    .then(res => {
                        console.log(res);
                        let mobileNo = res.mobileNo; //获取预留手机号
                        //判断预留手机号不为空，并且返回的手机号满足手机号码的规则
                        //判断是否需要校验短信验证码
                        if (判断是否是次日转账) {
                            //跳转至次日转账验证码、取款密码页面
                            app.api.pushWindow('transfer/bankcard_transfer/morrowverify.html');
                        } else {
                            //1、判断是否需要选择开户网点 ，需要跳转至开户网点选择页面选择网点 --待补充
                            //2、调取公共密码控件（获取短信验证码、取款密码输入）
                            //   app.api.showPassWordView('','','') 密码控件
                            //判断是否需要校验短信验证码
                            if (this.needSmsCode) {
                                //1、在密码控件中点击获取短信验证码，触发调用获取短信验证码接口this.send()
                                //2、输入完获取到的短信验证码及取款密码后先调用校验短信验证码接口
                                this.verifySMSCode();
                            } else {
                                //1、在密码控件中输入取款密码,调用转账提交方法
                                this.cardTransferSubmit();
                            }
                        }
                    })
                    .catch(err => {
                        console.log('======getTelephoneNumber=====');
                        console.log(err);
                    });
            },

            /**
             * Frame
             * 点击下一步按钮
             * TODO
             */
            async transferNext() {
                // 1、页面必须项合法性校验
                // 2、判断是否是快乐小象转账 ----待确认
                // 3、判断收款行是否是村镇银行
                if (村镇银行) {
                    //村镇银行标识赋值
                    this.isCunzhen = true;
                    //调用转账限制查询接口
                    let limitObj = await this.queryTransferLimit();
                    this.isTransferLimit(limitObj);
                } else {
                    //村镇银行标识赋值
                    this.isCunzhen = false;
                    //不是村镇银行,调用转账权限查询接口
                    this.transferNewJudge();
                }
            }
        },
        computed: {
            /**
             * Frame
             * 根据转账的相关信息匹配对应的转账方式
             * TODO
             */
            transferTypeList() {
                //1、根据开户行号判断是否是本行卡，本行卡不走网点和路由查询
                //2、他行卡需调用转账路由接口 this.selectTransferRouter()
            }
        },
        watch: {
            // 将收款人账号空格去掉
            payeeAccountNoSpace(val) {
                this.payeeAccountNo = val.replace(/ /g, '');
            }
        }
    };
</script>
<style lang="scss">
    @import './index.scss';
</style>
